package algo.A01_位运算;

import java.util.Scanner;

/**
 * 请实现一个函数，输入一个整数，输出该数二进制表示中1的个数。
 * 如9的二进制表示为1001，有2位是1.
 */
public class T03_二进制位中1的个数 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();
        //以二进制输出这个N
        System.out.println(Integer.toString(N, 2));
        //开始解题
        solution1(N);
        solution2(N);
    }

    /**
     * 位运算解法，将每一位都与1相与，结果为1时代表二进制位是1
     * 每次右移一位
     * @param N
     */
    private static void solution1(int N) {
        int result = 0;
        //int类型为4字节，32位
        for (int i = 0; i < 32; i++) {
            if (((N >> i) & 1) == 1) {
                result++;
            }
        }
        System.out.println("result = " + result);
    }

    /**
     * 字符串暴力解法
     */
    private static void solution2(int N){
        String s = Integer.toString(N, 2);
        int result = 0;
        for (int i = 0,len = s.length(); i < len; i++) {
            if('1' == s.charAt(i)){
                result++;
            }
        }
        System.out.println("result = " + result);
    }
}
